Template Method(ちょうぜつ本)
アルゴリズムの共通部分を基底となる抽象クラスで定義
異なる部分を穴埋めとして、具象クラスでオーバーライド
Template Methodの目的は、制約の多さを逆手に取ることで、逆に生産効率を上げること (Kindle版 p.327)
穴埋めにしたことで、問題をブレークダウンしている
テンプレート抽象となるクラスの定義を、クライアントコードが直接利用するのは避けたほうがいい (Kindle版 p.329)
利用者が意識する型はあくまでインターフェース
テンプレートメソッドパターンの基底となる抽象クラスはインターフェースを実装する
インターフェースを使うことで、テンプレートメソッドを使ったクラス群に当てはまらないものがあっても対応できる
IMO:経験から激しく同意
身も蓋もない言い方をすると、要するに、自由に書きなさいとして、コピーコードを大量に発生させてしまうよりは、継承の制約で縛ったほうがマシなコードが残ると思ったときに使います。(Kindle版 p.328)
構造を持った共通化
共通部分は同じソースコードを共有しましょう。
全体の作りはできているけど、内部で使う処理の部分部分が歯抜けメソッド (指定できるなら、可視性は protected スコープ) になったような抽象クラスを設けます。
歯抜けを実装させる(強制)
共通ライブラリにして自由に使わせるとは異なる
Template Method パターンは、いわば、クラス数最少のフレームワーク
よりハードコードに近いほうの妥協
Strategyを与えてコンポジションで実装する道もある(トレードオフ)